进销存软件权限设计及linq查询的问题,想请教一个大神们

时间:2023-01-19 17:01:08
刚刚接触这块的,想请教一个客位都是怎么设置用户的权限的。
网上看了文章大体是说,设计一些角色之类的,这些有用。我想要知道的是比如一个角色的权限如果是对于某个表的某个字段的操作。
例如:商品信息表里一般有进货价或者销售价格。像这类敏感信息,一般人是不能看或者不能修改的。像这样的权限一般是做在哪个位置呢。比如是限制某个按钮不能用呢还是怎么办。能不能做在数据库里,通过数据库限制某个权限不能修改某个表的某个字段或都查询某个字段,有这样的功能吗?初学者,问得不专业,别见笑。
还有一个问题也困拢了我好久,我用linq查询datatable的如果如何给gridview查看。我一般是这么弄的:

第一://这段代码的功能很简单,就是把查询到我结果给dataview帮忙看一下,运行是没问题,但不知道有没别的方法这是一个问题。
 if (BookID != null)
         {
             var BookQuery = from book in dt_book.AsEnumerable()                      //dt_book是我从数据库里取得的表
                                where book.Field<string>("ID").StartsWith(bookID)              
                                select Protduct;
             if (BookQuery.Count() > 0)
             {
                 gridview.DataSource = BookQuery.AsDataView();               
             }
             else
             {
                 gridview.DataSource = null;
             }
         }


第二:前面的这个代码linq支持查找出来的结果重新命名,于是我就改成:
if (ID!= null)
         {
             var BookQuery = from book in dt_Book.AsEnumerable()
                                where book.Field<string>("ID").StartsWith(BookID)
                                select new { 编码=book.Field<string>("ID"),书名=book.Field<string>("book")};  //后面解释这么做的想法
             if (ProductQuery.Count() > 0)
             {
                 .DataSource = ProductQuery.AsDataView(); 
             }
             else
             {
                 dgvProtInfo1.DataSource = null;
             }
         }
         
     }

这段代码是因为知道linq可以支持重新命名,所以就用select new{}的做法,其一是因为如果不重命名,查询出来的结果是和数据库里面的字段一样的,都是英文字段名,不方便最终用户阅读,另外对于有想法的人可以通过字段名猜数据库信息,对数据库也是不安全(不知道是否会有这种可能);其二是因为可以重命名的话可以订制自己想要查询到的结果集的字段,不致于整个表全部显示出来。
另外改了代码之后的问题是:
                 gridview.DataSource = BookQuery.AsDataView();
这段代码出错了,不能用了,不知道怎么办?
这么多不知道说明白了没,新人比较麻烦。以上感谢!!!

5 个解决方案

#1


不好意思,刚刚写太快了,后面一段的代码,写错了是:
 if (BookQuery.Count() > 0)
             {
                 BookQuery.DataSource = BookQuery.AsDataView(); 
             }
             else
             {
                 BookQuery.DataSource = null;

BookQuery.DataSource = BookQuery.AsDataView(); 这个地方报错

#2


  if (BookQuery.Count() > 0)
             {
                 gridview.DataSource = BookQuery.AsDataView();    //这个地方会报错
             }
             else
             {
                 gridview.DataSource = null;
             }

#3


调试一下 报什么错

#4


gridview这个绑定的字段名是不是写错了

#5


引用 4 楼 xiaoxiangqing 的回复:
gridview这个绑定的字段名是不是写错了


这个位置,写太快了,写错了,不是这个问题。现在报错的问题解决了,
代码如下:
select Book new 
                            {   编码=Book.Field<string>("ID"),  书名=Book.Field<string>("BookName")  };
             if (BookQuery.Count() > 0)
             {
                gridview.DataSource = BookQuery.AsParallel();  //这个叫什么并行查询什么的就可以了,
或者这样也行:gridview.DataSource = Book.AsQueryable();


现在想要了解的是权限的控制,一般写在什么地方,比如是写在窗体的Load里面吗,定义哪个控件不能显示,哪个可以显示吗。是这样吗?还是做在数据库里面,限制哪个字段什么用户可以修改,或者可以查询。

#1


不好意思,刚刚写太快了,后面一段的代码,写错了是:
 if (BookQuery.Count() > 0)
             {
                 BookQuery.DataSource = BookQuery.AsDataView(); 
             }
             else
             {
                 BookQuery.DataSource = null;

BookQuery.DataSource = BookQuery.AsDataView(); 这个地方报错

#2


  if (BookQuery.Count() > 0)
             {
                 gridview.DataSource = BookQuery.AsDataView();    //这个地方会报错
             }
             else
             {
                 gridview.DataSource = null;
             }

#3


调试一下 报什么错

#4


gridview这个绑定的字段名是不是写错了

#5


引用 4 楼 xiaoxiangqing 的回复:
gridview这个绑定的字段名是不是写错了


这个位置,写太快了,写错了,不是这个问题。现在报错的问题解决了,
代码如下:
select Book new 
                            {   编码=Book.Field<string>("ID"),  书名=Book.Field<string>("BookName")  };
             if (BookQuery.Count() > 0)
             {
                gridview.DataSource = BookQuery.AsParallel();  //这个叫什么并行查询什么的就可以了,
或者这样也行:gridview.DataSource = Book.AsQueryable();


现在想要了解的是权限的控制,一般写在什么地方,比如是写在窗体的Load里面吗,定义哪个控件不能显示,哪个可以显示吗。是这样吗?还是做在数据库里面,限制哪个字段什么用户可以修改,或者可以查询。