CRM中角色的一些功能权限的检查和处理


CRM中现没有正确处理一个用户对应多个角色,应自已做的时间长了记不清了,应一一检查如下功能:
1.建立角色时对所有目录都没有权限
检查如下;CRM_RolesAdd,核心代码如下
--添加操作 
 INSERT INTO acl_roles(
 [id],[created_by],[name],[description],[deleted]
 )VALUES(
 @id,@created_by,@name,@description,@deleted
 )
 DECLARE @ins_error int
 SELECT @ins_error = @@ERROR
 --插入在角色目录表中没有的关系,如果catalog表中无数据时,增加角色会出错,要先增加目录,才能增加角色
 --如果目录中没有明细,就不运行这条语句
 DECLARE @CatalogCount int
 SET @CatalogCount=(SELECT COUNT(*) FROM CRM_CATALOG)
 IF @CatalogCount>0
 BEGIN
--角色与目录之间是一个笛卡尔积,一个角色对应所有目录,一个目录属于所有角色,初始权限为0处理正确
  insert crm_rolecatalog(RolesID,CatalogID) select a.id,b.id from acl_roles a,crm_catalog b where ltrim(a.id)+ltrim(CAST(b.id AS char(3)))  not in(select ltrim(RolesID)+ltrim(CAST(CatalogID AS char(3))) from crm_rolecatalog) order by a.id
  PRINT '插入CRM_ROLECATALOG'
 END
2.更改角色对目录是权限只能用update去更新
RoleBase.RoleCatalogSetPower(roleID,Catalogid,1);//为当前角色目录设定权限
对应存储过程"
RoleCatalogUpdatePower
核心如下:--当前角色当前目录设定权限,正确处理
UPDATE CRM_RoleCatalog SET IsPower=@IsPower where RolesID=ltrim(@RolesID) AND CatalogID=@CatalogID

3.一个用户对应一个角色,修改成一个用户对应多用角色
(无需要设置,去掉限制,增加提示当前用户如果已经是另一个角色,以提配管理员处理错误)
自已做的都不记得当时怎么做的了,这里提醒自已,角色与用户之间是在行选择用户(弹出窗口)时返回时保存角色与用户关系的.
    string openstr="window.showModalDialog(\'RoleSelectUser.aspx?rand=Math.random()&RolesID="+rolesid+"\',window,'dialogWidth=600px;dialogHeight=400px;status=no;scroll=yes;resizable=no;\');";
    Button1.Attributes.Add("onclick",openstr);
应增加对当前角色是否经存在于角色用户表中,
AddRoleLoginuser->CRM_AddRoleLoginuser
 --是否已经插入过,如果已经插入过就不执行插入
 IF NOT EXISTS(SELECT * FROM CRM_RoleLoginuser WHERE RoleID=ltrim(@RoleID) AND LoginUserID=@LoginUserID )--00006
 INSERT INTO CRM_RoleLoginuser([RoleID],[LoginUserID])VALUES(@RoleID,@LoginUserID)

--增加用当前用户去查是否已经存在crm_roleLoginuser中,并返回角色代码,如果当前角色代码与当前编辑的代码不一样,就提示

3.动态菜单中正确处理当一个用户有多个角色时,如何设定菜单的权限问题,即应先合并两个角色的权限,合并出两个角色的权限.
RoleBase.GetCatalogByMoudle(Moduleid,userid)->现在是以模块与用户来提取目录权限的
对应存储过程
CRM_GetCatalogByMoudle--处理当一个用户有多个角色时,目录取有权限的那个角色的
详如下:
CREATE PROCEDURE CRM_GetCatalogByMoudle
 (
  @ModuleID int,
  @Userid int
 )
AS
 SET NOCOUNT ON
 --select id as CatalogID,catalogName,description,url from CRM_catalog where moduleid=@ModuleID
 
 select a.RolesID,a.CatalogID,a.IsPower,a.LoginUserID,b.catalogName,b.description,(Case IsPower when 0 then '0.aspx' else b.url end ) as url into #tempmenu from zy_view_LoginuserCatalog a,crm_catalog b where b.id=a.CatalogID and  b.moduleID=@ModuleID and a.LoginUserid=@Userid order by b.postion
 --角色目录用户关系视图
 --select * from zy_view_LoginuserCatalog where loginuserid=27 order by catalogid
 
 select catalogid,sum(ispower) as ispower,max(url) as url,loginuserid,catalogname,[description] from #tempmenu group by catalogid,loginuserid,catalogname,[description]
 drop table #tempmenu
 
 RETURN

GO

原文地址:https://www.cnblogs.com/hhq80/p/800915.html