package com.ruoyi.security.service;

import java.util.List;
import com.ruoyi.security.domain.AccessControl;

/**
 * 访问控制Service接口
 * 
 * @author ruoyi
 * @date 2024-12-19
 */
public interface IAccessControlService 
{
    /**
     * 查询访问控制
     * 
     * @param accessId 访问控制主键
     * @return 访问控制
     */
    public AccessControl selectAccessControlByAccessId(Long accessId);

    /**
     * 查询访问控制列表
     * 
     * @param accessControl 访问控制
     * @return 访问控制集合
     */
    public List<AccessControl> selectAccessControlList(AccessControl accessControl);

    /**
     * 检查用户对资源的访问权限
     * 
     * @param userId 用户ID
     * @param resourceType 资源类型
     * @param resourceId 资源ID
     * @return 访问控制信息，如果没有权限返回null
     */
    public AccessControl checkUserAccess(Long userId, String resourceType, String resourceId);

    /**
     * 查询用户所有权限
     * 
     * @param userId 用户ID
     * @return 访问控制集合
     */
    public List<AccessControl> selectUserPermissions(Long userId);

    /**
     * 查询即将过期的访问控制
     * 
     * @param days 天数
     * @return 访问控制集合
     */
    public List<AccessControl> selectExpiringAccess(int days);

    /**
     * 新增访问控制
     * 
     * @param accessControl 访问控制
     * @return 结果
     */
    public int insertAccessControl(AccessControl accessControl);

    /**
     * 修改访问控制
     * 
     * @param accessControl 访问控制
     * @return 结果
     */
    public int updateAccessControl(AccessControl accessControl);

    /**
     * 记录访问统计
     * 
     * @param accessId 访问控制ID
     * @return 结果
     */
    public int recordAccess(Long accessId);

    /**
     * 批量删除访问控制
     * 
     * @param accessIds 需要删除的访问控制主键集合
     * @return 结果
     */
    public int deleteAccessControlByAccessIds(Long[] accessIds);

    /**
     * 删除访问控制信息
     * 
     * @param accessId 访问控制主键
     * @return 结果
     */
    public int deleteAccessControlByAccessId(Long accessId);

    /**
     * 根据用户ID删除访问控制
     * 
     * @param userId 用户ID
     * @return 结果
     */
    public int deleteAccessControlByUserId(Long userId);
}