コード例 #1
0
        public Role Create(string name, string description, IList<Permission> permissions)
        {
            if (this.Exists(name, null))
            {
                return this._dataSource.Query<Role>().First(r => r.Name.ToLower() == name.ToLower());
            }

            var currentGroupId = StrixPlatform.User.GroupId;
            var role = new Role(Guid.NewGuid(), currentGroupId, name);
            role.Description = description;
            role.Permissions = permissions;
            _roleIdsAndNames.Clear();
            return this._dataSource.Save(role);
        }
コード例 #2
0
        private void CreatePermissions(IList<IModuleConfiguration> moduleConfigurations, Role adminPermissionSet)
        {
            var allPermissions = moduleConfigurations.SelectMany(c => c.ModulePermissions.SelectMany(p => p.Value)).Distinct().ToArray();
            var permissionsToCreate = allPermissions.ToLower().Except(this._dataSource.Query<Permission>().Where(p => p.ApplicationId == _appId).Select(p => p.Name.ToLower()));

            // Create all the permissions that do not yet exist.
            var saveChanges = false;

            foreach (var permissionName in allPermissions.Where(p => permissionsToCreate.Contains(p.ToLower())))
            {
                var permission = new Permission(Guid.NewGuid(), _appId, permissionName);
                this._dataSource.Save(permission);
                adminPermissionSet.Permissions.Add(permission);
                saveChanges = true;
            }

            if (saveChanges)
            {
                this._dataSource.SaveChanges();
            }
        }
コード例 #3
0
        private void CreateAndUpdateRoles(IList<IModuleConfiguration> moduleConfigurations)
        {
            var saveChanges = false;
            var existingPermissions = this._dataSource.Query<Permission>().Where(p => p.ApplicationId == _appId).ToList();
            var existingRoles = this._dataSource.Query<Role>("Permissions").Where(r => r.Permissions.Count == 0 || r.Permissions.Any(p => p.ApplicationId == _appId)).ToList();
            var allRoles = moduleConfigurations.SelectMany(c => c.ModulePermissions.Keys).Distinct().ToArray();

            // Add all the permissions to all the roles when not assigned yet, creating the roles
            // when they don't exist.
            foreach (var roleName in allRoles)
            {
                var role = existingRoles.FirstOrDefault(r => r.Name.ToLower() == roleName.ToLower());

                if (role == null)
                {
                    role = new Role(Guid.NewGuid(), _mainGroup.Id, roleName);
                    role.Permissions = new List<Permission>();
                    role.Groups = new List<GroupInRole>();
                    var mainGroupInRole = new GroupInRole(_mainGroup.Id, role.Id);
                    role.Groups.Add(mainGroupInRole);
                    this._dataSource.Save(role);
                    saveChanges = true;
                }

                var permissionsToReview = existingPermissions.Where(p => moduleConfigurations.Where(c => c.ModulePermissions.ContainsKey(roleName)).SelectMany(c => c.ModulePermissions[roleName]).Distinct().ToLower().Contains(p.Name.ToLower())).ToList();
                var permissionsToAdd = permissionsToReview.Where(p => !role.Permissions.Any(rp => rp.Name.ToLower() == p.Name.ToLower())).ToList();
                var permissionsToRemove = role.Permissions.Where(p => !permissionsToReview.Select(pr => pr.Name.ToLower()).Contains(p.Name.ToLower())).ToList();

                foreach (var permission in permissionsToRemove)
                {
                    var thePermission = role.Permissions.First(p => p.Id == permission.Id);
                    role.Permissions.Remove(thePermission);
                    saveChanges = true;
                }

                foreach (var permission in permissionsToAdd)
                {
                    role.Permissions.Add(permission);
                    saveChanges = true;
                }
            }

            if (saveChanges)
            {
                this._dataSource.SaveChanges();
            }
        }
コード例 #4
0
        private Role CreateAdminPermissionSet()
        {
            var adminPermissionSet = this._dataSource.Query<Role>("Permissions").FirstOrDefault(r => r.Permissions.Any(p => p.ApplicationId == _appId) && r.Name.ToLower() == Resources.DefaultValues.PermissionSetName.ToLower());

            if (adminPermissionSet == null)
            {
                adminPermissionSet = new Role(Guid.NewGuid(), _mainGroup.Id, Resources.DefaultValues.PermissionSetName);
                adminPermissionSet.Permissions = new List<Permission>();
                var adminGroupPermissionSet = new GroupInRole(_mainGroup.Id, adminPermissionSet.Id);
                adminGroupPermissionSet.StartDate = DateTime.Now;
                this._dataSource.Save(adminPermissionSet);
                this._dataSource.Save(adminGroupPermissionSet);
                adminPermissionSet.Groups = new List<GroupInRole> { adminGroupPermissionSet };
                this._dataSource.SaveChanges();
            }

            return adminPermissionSet;
        }
コード例 #5
0
        public void InitMainGroup()
        {
            if (_mainGroup == null)
            {
                _mainGroup = this._dataSource.Query<Group>("Roles.Role").Where(g => g.Name.ToLower() == Resources.DefaultValues.MainGroupName).FirstOrDefault();

                if (_mainGroup == null)
                {
                    var mainGroup = new Group(Guid.NewGuid(), Resources.DefaultValues.MainGroupName);
                    this._dataSource.Save(mainGroup);
                    var adminRole = new Role(Guid.NewGuid(), mainGroup.Id, PlatformConstants.ADMINROLE);
                    this._dataSource.Save(adminRole);
                    var groupRole = new GroupInRole(mainGroup.Id, adminRole.Id, DateTime.Now, null);
                    groupRole.CurrentNumberOfUsers = 1;
                    this._adminRole = groupRole;
                    mainGroup.Roles = new List<GroupInRole>() { groupRole };
                    _mainGroup = mainGroup;
                    this._dataSource.SaveChanges();
                }
                else
                {
                    this._adminRole = _mainGroup.Roles.First(r => r.Role.Name.ToLower() == PlatformConstants.ADMINROLE.ToLower());
                }
            }
        }